<?php
namespace common\models;

use Yii;
use yii\base\Model;
use yii\web\UploadedFile;
use common\component\tool\Tool;


class File extends \yii\db\ActiveRecord
{
    public static function getDb()
    {
        return Yii::$app->get("common_db");
    }
    
	public static function tableName()
    {
        return '{{%file}}';
    }

	public function rules()
    {
        return [
            ['file_name', 'required', 'message' => 'file_name不能为空', 'on' => 'add'],
            ['file_name', 'string', 'message' => 'file_name必须是字符串',
                           'max' => 64, 'tooLong' => 'file_name最长64位'],
            ['file_path', 'required', 'message' => 'file_path不能为空', 'on' => 'add'],
            ['file_path', 'string', 'message' => 'file_path必须是字符串',
                           'max' => 256, 'tooLong' => 'file_path最长256位'],
            /*注释原因：到阿里云之后，没必要判断了，反正所有文件都能上传*/
            // ['file_type', 'default', 'value' => 4],
            ['file_type', 'integer', 'message' => 'file_type必须为数字，或数字字符串'],
            /*注释原因：到阿里云之后，没必要判断了，反正所有文件都能上传*/
            // ['file_type', 'in', 'range' => array(1, 2, 3, 4, 5, 6), 'message' => 'file_type值必须在1~6中选择'],
            ['file_preview', 'default', 'value' => ''],
            ['file_preview', 'string', 'message' => 'file_preview必须是字符串',
                           'max' => 256, 'tooLong' => 'file_preview最长256位'],
            ['file_size', 'default', 'value' => 0],
            ['file_size', 'integer', 'message' => 'file_size必须为数字，或数字字符串', 
                            'min'=>0, 'tooSmall' => 'file_size最小存储0', 
                            'max'=>18446744073709551615, 'tooBig' => 'file_size最大存储18446744073709551615'],
            ['file_md5', 'required', 'message' => 'file_md5不能为空', 'on' => 'add'],
            ['file_md5', 'unique', 'message' => 'file_md5已经存在',],
            ['file_md5', 'string', 'message' => 'file_md5必须是字符串',
                           'max' => 256, 'tooLong' => 'file_md5最长256位'],
            ['add_time', 'default', 'value' => '1000-01-01 00:00:00'],
            ['add_time', 'date', 'format'=>'yyyy-MM-dd HH:mm:ss', 'message' => 'add_time非yyyy-MM-dd HH:mm:ss格式'],
            ['app_id', 'default', 'value' => 0],
            ['app_id', 'integer', 'message' => 'app_id必须为数字，或数字字符串', 
                        'min'=>0, 'tooSmall' => 'app_id最小存储0', 
                        'max'=>4294967295, 'tooBig' => 'app_id最大存储4294967295'],
            ['com_id', 'default', 'value' => 0],
            ['com_id', 'integer', 'message' => 'com_id必须为数字，或数字字符串', 
                        'min'=>0, 'tooSmall' => 'com_id最小存储0', 
                        'max'=>4294967295, 'tooBig' => 'com_id最大存储4294967295'],
        ];
    }


    /*
    上传图片
    $post       上次附带的数据
    $uploadFileName      文件夹名称（如果是认证中心则是comid，如果是实例则是appid）
    $fileType   文件类型
    $com_id     传到那个企业ID下(对内)
    $app_id     实例(对内)
    */
    public function upload($post, $uploadFileName, $fileType, $com_id = 0, $app_id = 0)
    {
        /*上传过来的图片，放到指定的位置*/
        $UploadForm = new UploadForm();
        $UploadForm->file = UploadedFile::getInstance($UploadForm, 'file');
        // P($UploadForm->file);
        if ($UploadForm->file && $UploadForm->validate()) {
            // $fileName = $UploadForm->file->baseName . '.' . $UploadForm->file->extension;
            $fileName = date("Ymd").Tool::generateRandomStr(3).date("His").Tool::generateRandomStr(3);//文件名称
            $fileSuffix = '.' . $UploadForm->file->extension;//文件后缀
            $folderName = date('Ymd');//放进今天日期的文件夹中
            $path = Yii::$app->basePath . '/web/' . Yii::$app->params['uploadPath'] . $uploadFileName . '/file/' . $folderName;//存放的路径(原始文件)（不包含文件名）
            if(!file_exists($path)){//创建今天日期的文件夹
                mkdir($path, 0777, true);
                chmod($path, 0777);
            }
            if($UploadForm->file->saveAs($path . '/' . $fileName . $fileSuffix)){
                $filePath = Yii::$app->params['uploadPath'] . $uploadFileName . '/file/' . $folderName . '/' . $fileName . $fileSuffix;//已经上传成功的文件路径
                /*判断此文件是否已经存在，如果存在则删除上传的文件*/
                $fileMd5 = md5_file($filePath);
                if(!is_null($file = self::find()->where('file_md5 ="' . $fileMd5 . '"')->one())){
                    unlink($filePath);
                    return $file->file_path;
                }
                /*插入到相册表中albumId*/
                $data = array(
                    'File' => array(
                        'file_name' => mb_substr($UploadForm->file->name, 0, 64, 'utf-8'),//截取前64个字符 因为数据库只够放64位
                        'file_path' => $filePath,
                        'file_type' => $fileType,
                        'file_size' => filesize($filePath),//获取文件大小,
                        'file_md5' => $fileMd5,
                        'add_time' => date('Y-m-d H:i:s', time()),
                        'app_id' => $app_id,
                        'com_id' => $com_id
                    )
                );
                if($this->load($data) and $this->validate()){
                    /*保存到相册*/
                    if($this->save(false)){
                        return $filePath;
                    }
            	}
                
            }

            return false;

        }

    }


    /*阿里云上传之后，需要更新到库里，方便日后统计*/
    public function saveFileInfo($post, $com_id = 0, $app_id = 0)
    {
        P($post);
    }


}
?>